﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;


namespace Classes
{
    /* Lookup - Classe Campo */
    public class LookupCampo
    {
        public string Nome { get; set; }
        public string Field { get; set; }
        public string Tipo { get; set; }
    }

    /* Classe Campos */
    public class Campo
    {
        public string Nome { get; set; }
        public string Field { get; set; }
        public object Componente { get; set; }
        public Boolean chave { get; set; }
        public Boolean obrigatorio { get; set; }
        public Boolean inserir { get; set; }
        public Boolean alterar { get; set; }
        public string[] valores { get; set; } /* Para checkbox Ativo/inativo */
        public int valor { get; set; } /* Para radiobutton */
        public LookupCombo lookup { get; set; }
        public DateTimePickerFormat DataFormato { get; set; }
    }


    /* Classe Join */
    public class Join
    {
        public string Tabela { get; set; }
        public string JoinIn { get; set; }
        public string Where { get; set; }
    }

    
    /* Classe Coluna */
    public class Coluna
    {
        public string Nome { get; set; }
        public string Field { get; set; }
        public int largura { get; set; }
        public string formato { get; set; }
        public Boolean visivel { get; set; }
    }


    /* Classe Filtro */
    public class Filtro
    {
        public object Componente { get; set; }
        public string Field { get; set; }
        public string Tipo { get; set; }
        public object Condicao { get; set; }
        public string[] Valores { get; set; }
    }


    /* INICIO - Localiza registros */
    public class LookupCombo
    {
        public ComboBox Campo;
        public string retorno = "";
        public string tabela = "";
        public string descricao = "";
        public string condicao = "";
        public string ordem = "";
        public SqlConnection SqlCon;
        public TextBox CampoRetorno;

        string sSQL = "";


        /* INICIO - Create da classe */
        public LookupCombo(ComboBox pCampo, TextBox pcRetorno, string pRetorno, string pTabela, string pDescricao, string StrConn, string pCondicao = "", string pOrdem = "")
        {
            Campo = pCampo;
            retorno = pRetorno;
            tabela = pTabela;
            descricao = pDescricao;
            condicao = pCondicao;
            ordem = pOrdem;
            //SqlCon = pSqlCon;
            CampoRetorno = pcRetorno;

            SqlCon = new SqlConnection(StrConn);


            GetSQL();
            preencheCombo();

            this.Campo.SelectedIndexChanged += new System.EventHandler(this.Selecionado);

        }
        /* FIM - Create da classe */


        /* INICIO - Preenche o campo principal do lookup */
        private void Selecionado(object sender, System.EventArgs e)
        {
            if (Campo.SelectedItem != null)
            {
                string Item = Campo.SelectedItem.ToString();
                Item = Item.Substring(1, Item.IndexOf(",") - 1);
                CampoRetorno.Text = Item.Trim();
            }
        }
        /* FIM - Preenche o campo principal do lookup */


        /* INICIO - Gera o comando de SELECT */
        public void GetSQL()
        {
            sSQL = "SELECT DISTINCT ";
            sSQL += " " + retorno + " AS Ret, ";
            sSQL += " " + descricao + " AS Descr ";
            sSQL += " FROM " + tabela;
            sSQL += " WHERE 1=1 ";
            if (condicao.Trim() != "")
                sSQL += " AND " + condicao;

            if (ordem.Trim() != "")
                sSQL += " ORDER BY " + ordem;
            else
                sSQL += " ORDER BY " + descricao;
        }
        /* FIM - Gera o comando de SELECT */


        /* INICIO - Preenche o Combo */
        public void preencheCombo() 
        {
            Campo.DataSource = null;
            Campo.Items.Clear();


            SqlCommand cmd;
            DataSet ds;
            DataTable dataTable;            

            cmd = new SqlCommand(sSQL, SqlCon);
            ds = new DataSet();

            /* Executa a query */
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            dataTable = new DataTable();

            /* faz o retorno dentro do dataset */
            da.Fill(dataTable);
            da.Dispose();

            var dictionary = new Dictionary<string, string>();
            var src = new AutoCompleteStringCollection();

            foreach (DataRow row in dataTable.Rows)
            {
                dictionary.Add(row.ItemArray[0].ToString(), row.ItemArray[1].ToString());
                src.Add(row.ItemArray[1].ToString());
            }

            
            Campo.DataSource = new BindingSource(dictionary, null);
            Campo.AutoCompleteMode = AutoCompleteMode.Suggest;
            Campo.AutoCompleteSource = AutoCompleteSource.ListItems;
            Campo.ValueMember = "Ret";
            Campo.DisplayMember = " Descr";

        }
        /* FIM - Preenche o Combo */


        /* INCIO - Localiza um registro */
        public int Localiza(string pValor)
        {
            Campo.Refresh();
            Campo.SelectedIndex = Campo.FindString("[" + pValor.Trim());
            return Campo.SelectedIndex;
        }
        /* FIM - Localiza um registro */

    
    }

}
